package io.tim.webserver.simple01;

import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 
 * 通过 ServerSocket 实现的简单 http server
 * 
 * @author Zhang Nan
 * @since [Date: 2/27/2017]
 *
 */
public class WebServer {

	public WebServer() {

	}

	// 启动服务器线程，监听指定端口
	public void startServer(int port) {

		try {
			// 创建一个新的 ServerSocket 并在端口 port 监听
			ServerSocket serverSocket = new ServerSocket(port);
			int counter = 0;
			try {
				while (true) {
					if (counter == 0) {
						System.out.println("HTTP Web Server 已经启动，并正在监听 " + port + " 端口...");
						counter++;
					} else {
					}
					// 通过 ServerSocket 返回一个建立好连接的 socket
					// 通过调用 ServerSocket 的 accept() 方法实现
					Socket socket = serverSocket.accept();
					System.out.println("[REMOTE HOST]: " + socket.getInetAddress().toString());
					System.out.println("[LISTNING ON PORT]: " + socket.getPort());

					// 创建一个新的处理线程
					new Processor(socket);
					// new ServeurWeb(sock, SERVER_ROOT, SERVER_HOMEPAGE,
					// SERVER_ICONS, SERVER_LOG);
				}
			} finally {
				// 总是要确保最后将 ServerSocket 关闭
				try {
					serverSocket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		} catch (BindException B) {
			// 处理端口占用异常
			System.out.println("指定端口已经被服务器所占用！");
			System.exit(0);
		} catch (IOException e1) {
			e1.printStackTrace();
			System.exit(0);
		}

	}

	public static void main(String[] args) {

		// 指定一个默认端口 80
		int port = 80;
		if (args.length == 1) {
			port = Integer.parseInt(args[0]);
		}

		new WebServer().startServer(port);
	}

}
